#include "Venda.h"
#include <iostream>

Venda::Venda()
{
	setValorTotal( 0.0 );
}

Venda::~Venda()
{
	
}

/*--- inicio dos metodos publicos ---*/

void Venda::inserirProduto(Produto* pProduto, int vQuantidade)
{
	while(vQuantidade < 0)
	{
		std::cout << std::endl << "Quantidade inferior a zero, nova quantidade:";
		std::cin >> vQuantidade;
	}
	
	noLista novoProduto;
	novoProduto.pProduto = pProduto;
	novoProduto.quantidade = vQuantidade;
	

	mProdutos.inserir(&novoProduto, novoProduto.pProduto->getCodigo());
}

ListaEncadeada < noLista*, int >* Venda::confirmaVenda()
{
	this->mStatusVenda = true;
	return &mProdutos;
}

void Venda::setStatus(bool vStatus)
{
	this->mStatusVenda = vStatus;
}
		
bool Venda::getStatus() const
{
	return this->mStatusVenda;
}
		
void Venda::setValorTotal(float vValorTotal)
{
	this->mValorTotal = vValorTotal;
}
		
float Venda::getValorTotal()
{
	this->calculaTotal();
	return this->mValorTotal;
}

void Venda::calculaTotal()
{
	mValorTotal = 0;
	noLista** pAuxiliar;

	while(!mProdutos.itsTheEnd())
	{
		pAuxiliar = mProdutos.retornaEsteEAvanca();
		mValorTotal += (*pAuxiliar)->pProduto->getValor() * (*pAuxiliar)->quantidade;
	}
	
}

float Venda::operator +(Venda vVendaASomar)
{
	return (this->getValorTotal() + vVendaASomar.getValorTotal());
}

void Venda::setCodigoVenda( int vCodigoVenda )
{
	this->mCodigoVenda = vCodigoVenda;
}

int Venda::getCodigoVenda() const
{
	return this->mCodigoVenda;
}

void Venda::mostraProdutos()
{
	std::cout << "Codigo \t\t\t Descricao \t\t\t Valor" << std::endl;
	
	noLista*
	p;
	
	while( !( this->mProdutos.itsTheEnd() ) )
	{
		p = *this->mProdutos.retornaEsteEAvanca();
		std::cout	<< p->pProduto->getCodigo() 		<< "\t\t\t"
		 			<< p->pProduto->getDescricao()	<< "\t\t\t"
		 			<< p->pProduto->getValor()		<< std::endl;
	}
}

/*--- fim dos metodos publicos ---*/
